home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / html / StyleSheet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  19.2 KB  |  1,022 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.Reader;
  10. import java.io.StringReader;
  11. import java.net.URL;
  12. import java.util.Enumeration;
  13. import java.util.Hashtable;
  14. import java.util.Vector;
  15. import javax.swing.border.Border;
  16. import javax.swing.border.EmptyBorder;
  17. import javax.swing.text.AttributeSet;
  18. import javax.swing.text.Element;
  19. import javax.swing.text.MutableAttributeSet;
  20. import javax.swing.text.SimpleAttributeSet;
  21. import javax.swing.text.Style;
  22. import javax.swing.text.StyleConstants;
  23. import javax.swing.text.StyleContext;
  24. import javax.swing.text.View;
  25. import javax.swing.text.html.HTML.Attribute;
  26. import javax.swing.text.html.HTML.Tag;
  27.  
  28. public class StyleSheet extends StyleContext {
  29.    static final Border noBorder = new EmptyBorder(0, 0, 0, 0);
  30.    static final int DEFAULT_FONT_SIZE = 3;
  31.    private CSS css;
  32.    private Hashtable selectorMapping = new Hashtable();
  33.    private Hashtable resolvedStyles = new Hashtable();
  34.    private Vector linkedStyleSheets;
  35.    private URL base;
  36.    static final SheetAttribute SPECIFICITY = new SheetAttribute("specificity", false);
  37.    static final SheetAttribute RULE = new SheetAttribute("rule", false);
  38.    static final SheetAttribute WEIGHT = new SheetAttribute("rule-weight", false);
  39.    static final SheetAttribute BOX_PAINTER = new SheetAttribute("box-painter", true);
  40.    static final SheetAttribute LIST_PAINTER = new SheetAttribute("list-painter", true);
  41.  
  42.    static {
  43.       StyleContext.registerStaticAttributeKey(RULE);
  44.       StyleContext.registerStaticAttributeKey(WEIGHT);
  45.       StyleContext.registerStaticAttributeKey(BOX_PAINTER);
  46.       StyleContext.registerStaticAttributeKey(LIST_PAINTER);
  47.    }
  48.  
  49.    public StyleSheet() {
  50.       if (this.css == null) {
  51.          this.css = new CSS();
  52.       }
  53.  
  54.    }
  55.  
  56.    private String _cleanSelectorString(String var1) {
  57.       SearchBuffer var2 = javax.swing.text.html.StyleSheet.SearchBuffer.obtainSearchBuffer();
  58.       StringBuffer var3 = var2.getStringBuffer();
  59.       boolean var4 = true;
  60.       int var5 = 0;
  61.       char[] var6 = var1.toCharArray();
  62.       int var7 = var6.length;
  63.       Object var8 = null;
  64.  
  65.       try {
  66.          for(int var11 = 0; var11 < var7; ++var11) {
  67.             switch (var6[var11]) {
  68.                case '\t':
  69.                case '\n':
  70.                case '\r':
  71.                   if (!var4) {
  72.                      var4 = true;
  73.                      if (var5 < var11) {
  74.                         var3.append(var6, var5, var11 - var5);
  75.                         var3.append(' ');
  76.                      }
  77.                   }
  78.  
  79.                   var5 = var11 + 1;
  80.                   break;
  81.                case ' ':
  82.                   if (!var4) {
  83.                      var4 = true;
  84.                      if (var5 < var11) {
  85.                         var3.append(var6, var5, 1 + var11 - var5);
  86.                      }
  87.                   }
  88.  
  89.                   var5 = var11 + 1;
  90.                   break;
  91.                default:
  92.                   var4 = false;
  93.             }
  94.          }
  95.  
  96.          if (var4 && var3.length() > 0) {
  97.             var3.setLength(var3.length() - 1);
  98.          } else if (var5 < var7) {
  99.             var3.append(var6, var5, var7 - var5);
  100.          }
  101.  
  102.          var14 = var3.toString();
  103.       } finally {
  104.          javax.swing.text.html.StyleSheet.SearchBuffer.releaseSearchBuffer(var2);
  105.       }
  106.  
  107.       return var14;
  108.    }
  109.  
  110.    // $FF: synthetic method
  111.    static CSS access$0(StyleSheet var0) {
  112.       return var0.css;
  113.    }
  114.  
  115.    public AttributeSet addAttribute(AttributeSet var1, Object var2, Object var3) {
  116.       if (this.css == null) {
  117.          this.css = new CSS();
  118.       }
  119.  
  120.       if (var2 instanceof StyleConstants) {
  121.          Object var4 = this.css.styleConstantsValueToCSSValue((StyleConstants)var2, var3);
  122.          if (var4 != null) {
  123.             CSS.Attribute var5 = this.css.styleConstantsKeyToCSSKey((StyleConstants)var2);
  124.             if (var5 != null) {
  125.                return super.addAttribute(var1, var5, var4);
  126.             }
  127.          }
  128.       }
  129.  
  130.       return super.addAttribute(var1, var2, var3);
  131.    }
  132.  
  133.    public AttributeSet addAttributes(AttributeSet var1, AttributeSet var2) {
  134.       return super.addAttributes(var1, this.convertAttributeSet(var2));
  135.    }
  136.  
  137.    boolean addCSSAttribute(MutableAttributeSet var1, CSS.Attribute var2, String var3) {
  138.       Object var4 = this.css.getInternalCSSValue(var2, var3);
  139.       if (var4 != null) {
  140.          var1.addAttribute(var2, var4);
  141.          return true;
  142.       } else {
  143.          return false;
  144.       }
  145.    }
  146.  
  147.    boolean addCSSAttributeFromHTML(MutableAttributeSet var1, CSS.Attribute var2, String var3) {
  148.       Object var4 = this.css.getCssValue(var2, var3);
  149.       if (var4 != null) {
  150.          var1.addAttribute(var2, var4);
  151.          return true;
  152.       } else {
  153.          return false;
  154.       }
  155.    }
  156.  
  157.    public void addRule(String var1) {
  158.       if (var1 != null) {
  159.          CssParser var2 = new CssParser(this);
  160.  
  161.          try {
  162.             var2.parse(this.getBase(), new StringReader(var1), false, false);
  163.          } catch (IOException var3) {
  164.          }
  165.       }
  166.  
  167.    }
  168.  
  169.    void addRule(String[] var1, AttributeSet var2, boolean var3) {
  170.       int var4 = var1.length;
  171.       StringBuffer var5 = new StringBuffer();
  172.       var5.append(var1[0]);
  173.  
  174.       for(int var6 = 1; var6 < var4; ++var6) {
  175.          var5.append(' ');
  176.          var5.append(var1[var6]);
  177.       }
  178.  
  179.       String var7 = var5.toString();
  180.       Style var8 = ((StyleContext)this).getStyle(var7);
  181.       if (var8 == null) {
  182.          Style var9 = ((StyleContext)this).addStyle(var7, (Style)null);
  183.          synchronized(this){}
  184.  
  185.          try {
  186.             Object var12 = this.getRootSelectorMapping();
  187.  
  188.             for(int var13 = var4 - 1; var13 >= 0; --var13) {
  189.                var12 = this.getSelectorMapping(var12, var1[var13], true);
  190.             }
  191.  
  192.             var8 = this.getMappingStyle(var12);
  193.             if (var8 == null) {
  194.                var8 = this.createStyleForSelector(var7, var12, var9);
  195.                this.refreshResolvedRules(var7, var1, var8, this.getSpecificity(var12));
  196.             }
  197.          } catch (Throwable var15) {
  198.             throw var15;
  199.          }
  200.       }
  201.  
  202.       if (var3) {
  203.          var8 = this.getLinkedStyle(var8);
  204.       }
  205.  
  206.       var8.addAttributes(var2);
  207.    }
  208.  
  209.    private void addSortedStyle(Object var1, Vector var2) {
  210.       int var3 = var2.size();
  211.       if (var3 > 0) {
  212.          int var4 = this.getSpecificity(var1);
  213.  
  214.          for(int var5 = 0; var5 < var3; ++var5) {
  215.             if (var4 >= this.getSpecificity(var2.elementAt(var5))) {
  216.                var2.insertElementAt(var1, var5);
  217.                return;
  218.             }
  219.          }
  220.       }
  221.  
  222.       var2.addElement(var1);
  223.    }
  224.  
  225.    synchronized void addStyleSheet(StyleSheet var1) {
  226.       if (this.linkedStyleSheets == null) {
  227.          this.linkedStyleSheets = new Vector();
  228.       }
  229.  
  230.       if (!this.linkedStyleSheets.contains(var1)) {
  231.          this.linkedStyleSheets.insertElementAt(var1, 0);
  232.          this.linkStyleSheetAt(var1, 0);
  233.       }
  234.  
  235.    }
  236.  
  237.    String cleanSelectorString(String var1) {
  238.       boolean var2 = true;
  239.       int var3 = 0;
  240.  
  241.       for(int var4 = var1.length(); var3 < var4; ++var3) {
  242.          switch (var1.charAt(var3)) {
  243.             case '\t':
  244.             case '\n':
  245.             case '\r':
  246.                return this._cleanSelectorString(var1);
  247.             case ' ':
  248.                if (var2) {
  249.                   return this._cleanSelectorString(var1);
  250.                }
  251.  
  252.                var2 = true;
  253.                break;
  254.             default:
  255.                var2 = false;
  256.          }
  257.       }
  258.  
  259.       if (var2) {
  260.          return this._cleanSelectorString(var1);
  261.       } else {
  262.          return var1;
  263.       }
  264.    }
  265.  
  266.    AttributeSet convertAttributeSet(AttributeSet var1) {
  267.       if (!(var1 instanceof LargeConversionSet) && !(var1 instanceof SmallConversionSet)) {
  268.          Enumeration var2 = var1.getAttributeNames();
  269.  
  270.          while(var2.hasMoreElements()) {
  271.             Object var3 = var2.nextElement();
  272.             if (var3 instanceof StyleConstants) {
  273.                LargeConversionSet var4 = new LargeConversionSet(this);
  274.                Enumeration var5 = var1.getAttributeNames();
  275.  
  276.                while(var5.hasMoreElements()) {
  277.                   Object var6 = var5.nextElement();
  278.                   Object var7 = null;
  279.                   if (var6 instanceof StyleConstants) {
  280.                      CSS.Attribute var8 = this.css.styleConstantsKeyToCSSKey((StyleConstants)var6);
  281.                      if (var8 != null) {
  282.                         Object var9 = var1.getAttribute(var6);
  283.                         var7 = this.css.styleConstantsValueToCSSValue((StyleConstants)var6, var9);
  284.                         if (var7 != null) {
  285.                            var4.addAttribute(var8, var7);
  286.                         }
  287.                      }
  288.                   }
  289.  
  290.                   if (var7 == null) {
  291.                      var4.addAttribute(var6, var1.getAttribute(var6));
  292.                   }
  293.                }
  294.  
  295.                return var4;
  296.             }
  297.          }
  298.  
  299.          return var1;
  300.       } else {
  301.          return var1;
  302.       }
  303.    }
  304.  
  305.    protected MutableAttributeSet createLargeAttributeSet(AttributeSet var1) {
  306.       return new LargeConversionSet(this, var1);
  307.    }
  308.  
  309.    private Style createResolvedStyle(String var1) {
  310.       SearchBuffer var2 = javax.swing.text.html.StyleSheet.SearchBuffer.obtainSearchBuffer();
  311.       Vector var3 = var2.getVector();
  312.  
  313.       Style var4;
  314.       try {
  315.          int var8 = 0;
  316.          int var9 = 0;
  317.          int var10 = 0;
  318.          int var11 = 0;
  319.  
  320.          for(int var12 = var1.length(); var11 < var12; var11 = var9 + 1) {
  321.             if (var8 == var11) {
  322.                var8 = var1.indexOf(46, var11);
  323.             }
  324.  
  325.             if (var10 == var11) {
  326.                var10 = var1.indexOf(35, var11);
  327.             }
  328.  
  329.             var9 = var1.indexOf(32, var11);
  330.             if (var9 == -1) {
  331.                var9 = var12;
  332.             }
  333.  
  334.             if (var8 != -1 && var10 != -1 && var8 < var9 && var10 < var9) {
  335.                if (var10 < var8) {
  336.                   if (var11 == var10) {
  337.                      var3.addElement("");
  338.                   } else {
  339.                      var3.addElement(var1.substring(var11, var10));
  340.                   }
  341.  
  342.                   if (var8 + 1 < var9) {
  343.                      var3.addElement(var1.substring(var8 + 1, var9));
  344.                   } else {
  345.                      var3.addElement((Object)null);
  346.                   }
  347.  
  348.                   if (var10 + 1 == var8) {
  349.                      var3.addElement((Object)null);
  350.                   } else {
  351.                      var3.addElement(var1.substring(var10 + 1, var8));
  352.                   }
  353.                } else if (var10 < var9) {
  354.                   if (var11 == var8) {
  355.                      var3.addElement("");
  356.                   } else {
  357.                      var3.addElement(var1.substring(var11, var8));
  358.                   }
  359.  
  360.                   if (var8 + 1 < var10) {
  361.                      var3.addElement(var1.substring(var8 + 1, var10));
  362.                   } else {
  363.                      var3.addElement((Object)null);
  364.                   }
  365.  
  366.                   if (var10 + 1 == var9) {
  367.                      var3.addElement((Object)null);
  368.                   } else {
  369.                      var3.addElement(var1.substring(var10 + 1, var9));
  370.                   }
  371.                }
  372.  
  373.                var8 = var10 = var9 + 1;
  374.             } else if (var8 != -1 && var8 < var9) {
  375.                if (var8 == var11) {
  376.                   var3.addElement("");
  377.                } else {
  378.                   var3.addElement(var1.substring(var11, var8));
  379.                }
  380.  
  381.                if (var8 + 1 == var9) {
  382.                   var3.addElement((Object)null);
  383.                } else {
  384.                   var3.addElement(var1.substring(var8 + 1, var9));
  385.                }
  386.  
  387.                var3.addElement((Object)null);
  388.                var8 = var9 + 1;
  389.             } else if (var10 != -1 && var10 < var9) {
  390.                if (var10 == var11) {
  391.                   var3.addElement("");
  392.                } else {
  393.                   var3.addElement(var1.substring(var11, var10));
  394.                }
  395.  
  396.                var3.addElement((Object)null);
  397.                if (var10 + 1 == var9) {
  398.                   var3.addElement((Object)null);
  399.                } else {
  400.                   var3.addElement(var1.substring(var10 + 1, var9));
  401.                }
  402.  
  403.                var10 = var9 + 1;
  404.             } else {
  405.                var3.addElement(var1.substring(var11, var9));
  406.                var3.addElement((Object)null);
  407.                var3.addElement((Object)null);
  408.             }
  409.          }
  410.  
  411.          int var13 = var3.size();
  412.          int var14 = var13 / 3;
  413.          String[] var15 = new String[var14];
  414.          String[] var16 = new String[var14];
  415.          String[] var17 = new String[var14];
  416.          int var18 = 0;
  417.  
  418.          for(int var19 = var13 - 3; var18 < var14; var19 -= 3) {
  419.             var15[var18] = (String)var3.elementAt(var19);
  420.             var16[var18] = (String)var3.elementAt(var19 + 1);
  421.             var17[var18] = (String)var3.elementAt(var19 + 2);
  422.             ++var18;
  423.          }
  424.  
  425.          var4 = this.createResolvedStyle(var1, var15, var16, var17);
  426.       } finally {
  427.          javax.swing.text.html.StyleSheet.SearchBuffer.releaseSearchBuffer(var2);
  428.       }
  429.  
  430.       return var4;
  431.    }
  432.  
  433.    private Style createResolvedStyle(String var1, Vector var2, HTML.Tag var3) {
  434.       int var4 = var2.size();
  435.       if (var3 == Tag.IMPLIED) {
  436.          var3 = Tag.P;
  437.       }
  438.  
  439.       String[] var5 = new String[var4];
  440.       String[] var6 = new String[var4];
  441.       String[] var7 = new String[var4];
  442.  
  443.       for(int var8 = 0; var8 < var4; ++var8) {
  444.          Element var9 = (Element)var2.elementAt(var8);
  445.          AttributeSet var10 = var9.getAttributes();
  446.          if (var10 != null) {
  447.             HTML.Tag var11 = (HTML.Tag)var10.getAttribute(StyleConstants.NameAttribute);
  448.             if (var11 == Tag.IMPLIED) {
  449.                var11 = Tag.P;
  450.             }
  451.  
  452.             if (var11 != null) {
  453.                var5[var8] = var11.toString();
  454.             } else {
  455.                var5[var8] = null;
  456.             }
  457.  
  458.             if (var10.isDefined(Attribute.CLASS)) {
  459.                var7[var8] = var10.getAttribute(Attribute.CLASS).toString();
  460.             } else {
  461.                var7[var8] = null;
  462.             }
  463.  
  464.             if (var10.isDefined(Attribute.ID)) {
  465.                var6[var8] = var10.getAttribute(Attribute.ID).toString();
  466.             } else {
  467.                var6[var8] = null;
  468.             }
  469.          } else {
  470.             var5[var8] = var6[var8] = var7[var8] = null;
  471.          }
  472.       }
  473.  
  474.       var5[0] = var3.toString();
  475.       return this.createResolvedStyle(var1, var5, var6, var7);
  476.    }
  477.  
  478.    private synchronized Style createResolvedStyle(String var1, String[] var2, String[] var3, String[] var4) {
  479.       SearchBuffer var5 = javax.swing.text.html.StyleSheet.SearchBuffer.obtainSearchBuffer();
  480.       Vector var6 = var5.getVector();
  481.       Hashtable var7 = var5.getHashtable();
  482.  
  483.       ResolvedStyle var8;
  484.       try {
  485.          Object var11 = this.getRootSelectorMapping();
  486.          int var12 = var2.length;
  487.          String var13 = var2[0];
  488.          Object var14 = this.getSelectorMapping(var11, var13, false);
  489.          if (var14 != null) {
  490.             this.getStyles(var14, var6, var2, var3, var4, 1, var12, var7);
  491.          }
  492.  
  493.          if (var4[0] != null) {
  494.             String var15 = var4[0];
  495.             var14 = this.getSelectorMapping(var11, var13 + "." + var15, false);
  496.             if (var14 != null) {
  497.                this.getStyles(var14, var6, var2, var3, var4, 1, var12, var7);
  498.             }
  499.  
  500.             var14 = this.getSelectorMapping(var11, "." + var15, false);
  501.             if (var14 != null) {
  502.                this.getStyles(var14, var6, var2, var3, var4, 1, var12, var7);
  503.             }
  504.          }
  505.  
  506.          if (var3[0] != null) {
  507.             String var27 = var3[0];
  508.             var14 = this.getSelectorMapping(var11, var13 + "#" + var27, false);
  509.             if (var14 != null) {
  510.                this.getStyles(var14, var6, var2, var3, var4, 1, var12, var7);
  511.             }
  512.  
  513.             var14 = this.getSelectorMapping(var11, "#" + var27, false);
  514.             if (var14 != null) {
  515.                this.getStyles(var14, var6, var2, var3, var4, 1, var12, var7);
  516.             }
  517.          }
  518.  
  519.          int var28 = this.linkedStyleSheets != null ? this.linkedStyleSheets.size() : 0;
  520.          int var16 = var6.size();
  521.          AttributeSet[] var17 = new AttributeSet[var16 + var28];
  522.  
  523.          for(int var18 = 0; var18 < var16; ++var18) {
  524.             var17[var18] = this.getMappingStyle(var6.elementAt(var18));
  525.          }
  526.  
  527.          for(int var19 = 0; var19 < var28; ++var19) {
  528.             Style var20 = ((StyleSheet)this.linkedStyleSheets.elementAt(var19)).getRule(var1);
  529.             if (var20 == null) {
  530.                var17[var19 + var16] = SimpleAttributeSet.EMPTY;
  531.             } else {
  532.                var17[var19 + var16] = var20;
  533.             }
  534.          }
  535.  
  536.          ResolvedStyle var29 = new ResolvedStyle(var1, var17, var16);
  537.          this.resolvedStyles.put(var1, var29);
  538.          var8 = var29;
  539.       } finally {
  540.          javax.swing.text.html.StyleSheet.SearchBuffer.releaseSearchBuffer(var5);
  541.       }
  542.  
  543.       return var8;
  544.    }
  545.  
  546.    protected StyleContext.SmallAttributeSet createSmallAttributeSet(AttributeSet var1) {
  547.       return new SmallConversionSet(this, var1);
  548.    }
  549.  
  550.    private synchronized Style createStyleForSelector(String var1, Object var2, Style var3) {
  551.       Style var4 = (Style)((Hashtable)var2).get(RULE);
  552.       if (var4 == null) {
  553.          var4 = var3;
  554.          ((Hashtable)var2).put(RULE, var3);
  555.       }
  556.  
  557.       return var4;
  558.    }
  559.  
  560.    public Color getBackground(AttributeSet var1) {
  561.       return this.css.getColor(var1, javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR);
  562.    }
  563.  
  564.    URL getBase() {
  565.       return this.base;
  566.    }
  567.  
  568.    public BoxPainter getBoxPainter(AttributeSet var1) {
  569.       return new BoxPainter(var1, this.css, this);
  570.    }
  571.  
  572.    public AttributeSet getDeclaration(String var1) {
  573.       if (var1 == null) {
  574.          return SimpleAttributeSet.EMPTY;
  575.       } else {
  576.          CssParser var2 = new CssParser(this);
  577.          return var2.parseDeclaration(var1);
  578.       }
  579.    }
  580.  
  581.    public Font getFont(AttributeSet var1) {
  582.       return this.css.getFont(this, var1, 12);
  583.    }
  584.  
  585.    public Color getForeground(AttributeSet var1) {
  586.       Color var2 = this.css.getColor(var1, javax.swing.text.html.CSS.Attribute.COLOR);
  587.       return var2 == null ? Color.black : var2;
  588.    }
  589.  
  590.    public static int getIndexOfSize(float var0) {
  591.       return CSS.getIndexOfSize(var0);
  592.    }
  593.  
  594.    private Style getLinkedStyle(Style var1) {
  595.       Style var2 = (Style)var1.getResolveParent();
  596.       if (var2 == null) {
  597.          var2 = ((StyleContext)this).addStyle((String)null, (Style)null);
  598.          var1.setResolveParent(var2);
  599.       }
  600.  
  601.       return var2;
  602.    }
  603.  
  604.    public ListPainter getListPainter(AttributeSet var1) {
  605.       return new ListPainter(var1);
  606.    }
  607.  
  608.    private Style getMappingStyle(Object var1) {
  609.       return (Style)((Hashtable)var1).get(RULE);
  610.    }
  611.  
  612.    public float getPointSize(int var1) {
  613.       return this.css.getPointSize(var1);
  614.    }
  615.  
  616.    public float getPointSize(String var1) {
  617.       return this.css.getPointSize(var1);
  618.    }
  619.  
  620.    private synchronized Style getResolvedStyle(String var1) {
  621.       Style var2 = (Style)this.resolvedStyles.get(var1);
  622.       if (var2 == null) {
  623.          var2 = this.createResolvedStyle(var1);
  624.       }
  625.  
  626.       return var2;
  627.    }
  628.  
  629.    private synchronized Style getResolvedStyle(String var1, Vector var2, HTML.Tag var3) {
  630.       Style var4 = (Style)this.resolvedStyles.get(var1);
  631.       if (var4 == null) {
  632.          var4 = this.createResolvedStyle(var1, var2, var3);
  633.       }
  634.  
  635.       return var4;
  636.    }
  637.  
  638.    private Object getRootSelectorMapping() {
  639.       return this.selectorMapping;
  640.    }
  641.  
  642.    public Style getRule(String var1) {
  643.       var1 = this.cleanSelectorString(var1);
  644.       if (var1 != null) {
  645.          Style var2 = this.getResolvedStyle(var1);
  646.          return var2;
  647.       } else {
  648.          return null;
  649.       }
  650.    }
  651.  
  652.    public Style getRule(HTML.Tag var1, Element var2) {
  653.       SearchBuffer var3 = javax.swing.text.html.StyleSheet.SearchBuffer.obtainSearchBuffer();
  654.  
  655.       Style var4;
  656.       try {
  657.          Vector var7 = var3.getVector();
  658.  
  659.          for(Element var8 = var2; var8 != null; var8 = var8.getParentElement()) {
  660.             var7.addElement(var8);
  661.          }
  662.  
  663.          int var9 = var7.size();
  664.          StringBuffer var10 = var3.getStringBuffer();
  665.  
  666.          for(int var14 = var9 - 1; var14 >= 1; --var14) {
  667.             var2 = (Element)var7.elementAt(var14);
  668.             AttributeSet var11 = var2.getAttributes();
  669.             Object var13 = var11.getAttribute(StyleConstants.NameAttribute);
  670.             String var12;
  671.             if (var13 instanceof HTML.Tag) {
  672.                if (var13 == Tag.IMPLIED) {
  673.                   var12 = Tag.P.toString();
  674.                } else {
  675.                   var12 = var13.toString();
  676.                }
  677.             } else {
  678.                var12 = var13.toString();
  679.             }
  680.  
  681.             var10.append(var12);
  682.             if (var11 != null) {
  683.                if (var11.isDefined(Attribute.ID)) {
  684.                   var10.append('#');
  685.                   var10.append(var11.getAttribute(Attribute.ID));
  686.                } else if (var11.isDefined(Attribute.CLASS)) {
  687.                   var10.append('.');
  688.                   var10.append(var11.getAttribute(Attribute.CLASS));
  689.                }
  690.             }
  691.  
  692.             var10.append(' ');
  693.          }
  694.  
  695.          if (var1 == Tag.IMPLIED) {
  696.             var1 = Tag.P;
  697.          }
  698.  
  699.          var10.append(var1.toString());
  700.          var2 = (Element)var7.elementAt(0);
  701.          AttributeSet var20 = var2.getAttributes();
  702.          if (var20 != null) {
  703.             if (var20.isDefined(Attribute.ID)) {
  704.                var10.append('#');
  705.                var10.append(var20.getAttribute(Attribute.ID));
  706.             } else if (var20.isDefined(Attribute.CLASS)) {
  707.                var10.append('.');
  708.                var10.append(var20.getAttribute(Attribute.CLASS));
  709.             }
  710.          }
  711.  
  712.          Style var15 = this.getResolvedStyle(var10.toString(), var7, var1);
  713.          var4 = var15;
  714.       } finally {
  715.          javax.swing.text.html.StyleSheet.SearchBuffer.releaseSearchBuffer(var3);
  716.       }
  717.  
  718.       return var4;
  719.    }
  720.  
  721.    private synchronized Object getSelectorMapping(Object var1, String var2, boolean var3) {
  722.       Hashtable var4 = (Hashtable)((Hashtable)var1).get(var2);
  723.       if (var4 == null && var3) {
  724.          var4 = new Hashtable(7);
  725.          ((Hashtable)var1).put(var2, var4);
  726.          int var5 = 0;
  727.          if (var1 != null) {
  728.             Object var6 = ((Hashtable)var1).get(SPECIFICITY);
  729.             if (var6 != null) {
  730.                var5 = (Integer)var6;
  731.             }
  732.          }
  733.  
  734.          char var8 = var2.charAt(0);
  735.          if (var8 == '.') {
  736.             var5 += 100;
  737.          } else if (var8 == '#') {
  738.             var5 += 10000;
  739.          } else {
  740.             ++var5;
  741.             if (var2.indexOf(46) != -1) {
  742.                var5 += 100;
  743.             }
  744.  
  745.             if (var2.indexOf(35) != -1) {
  746.                var5 += 10000;
  747.             }
  748.          }
  749.  
  750.          var4.put(SPECIFICITY, new Integer(var5));
  751.       }
  752.  
  753.       return var4;
  754.    }
  755.  
  756.    String[] getSimpleSelectors(String var1) {
  757.       var1 = this.cleanSelectorString(var1);
  758.       SearchBuffer var2 = javax.swing.text.html.StyleSheet.SearchBuffer.obtainSearchBuffer();
  759.       Vector var3 = var2.getVector();
  760.       int var4 = 0;
  761.       int var5 = var1.length();
  762.  
  763.       while(var4 != -1) {
  764.          int var6 = var1.indexOf(32, var4);
  765.          if (var6 != -1) {
  766.             var3.addElement(var1.substring(var4, var6));
  767.             ++var6;
  768.             if (var6 == var5) {
  769.                var4 = -1;
  770.             } else {
  771.                var4 = var6;
  772.             }
  773.          } else {
  774.             var3.addElement(var1.substring(var4));
  775.             var4 = -1;
  776.          }
  777.       }
  778.  
  779.       String[] var9 = new String[var3.size()];
  780.       var3.copyInto(var9);
  781.       javax.swing.text.html.StyleSheet.SearchBuffer.releaseSearchBuffer(var2);
  782.       return var9;
  783.    }
  784.  
  785.    private int getSpecificity(Object var1) {
  786.       Object var2 = ((Hashtable)var1).get(SPECIFICITY);
  787.       return var2 != null ? (Integer)var2 : 0;
  788.    }
  789.  
  790.    static int getSpecificity(String var0) {
  791.       int var1 = 0;
  792.       boolean var2 = true;
  793.       int var3 = 0;
  794.  
  795.       for(int var4 = var0.length(); var3 < var4; ++var3) {
  796.          switch (var0.charAt(var3)) {
  797.             case ' ':
  798.                var2 = true;
  799.                break;
  800.             case '#':
  801.                var1 += 10000;
  802.                break;
  803.             case '.':
  804.                var1 += 100;
  805.                break;
  806.             default:
  807.                if (var2) {
  808.                   var2 = false;
  809.                   ++var1;
  810.                }
  811.          }
  812.       }
  813.  
  814.       return var1;
  815.    }
  816.  
  817.    synchronized Enumeration getStyleSheets() {
  818.       return this.linkedStyleSheets == null ? null : this.linkedStyleSheets.elements();
  819.    }
  820.  
  821.    private synchronized void getStyles(Object var1, Vector var2, String[] var3, String[] var4, String[] var5, int var6, int var7, Hashtable var8) {
  822.       if (!var8.contains(var1)) {
  823.          var8.put(var1, var1);
  824.          Style var9 = this.getMappingStyle(var1);
  825.          if (var9 != null) {
  826.             this.addSortedStyle(var1, var2);
  827.          }
  828.  
  829.          for(int var10 = var6; var10 < var7; ++var10) {
  830.             String var11 = var3[var10];
  831.             if (var11 != null) {
  832.                Object var12 = this.getSelectorMapping(var1, var11, false);
  833.                if (var12 != null) {
  834.                   this.getStyles(var12, var2, var3, var4, var5, var10 + 1, var7, var8);
  835.                }
  836.  
  837.                if (var5[var10] != null) {
  838.                   String var13 = var5[var10];
  839.                   var12 = this.getSelectorMapping(var1, var11 + "." + var13, false);
  840.                   if (var12 != null) {
  841.                      this.getStyles(var12, var2, var3, var4, var5, var10 + 1, var7, var8);
  842.                   }
  843.  
  844.                   var12 = this.getSelectorMapping(var1, "." + var13, false);
  845.                   if (var12 != null) {
  846.                      this.getStyles(var12, var2, var3, var4, var5, var10 + 1, var7, var8);
  847.                   }
  848.                }
  849.  
  850.                if (var4[var10] != null) {
  851.                   String var18 = var4[var10];
  852.                   var12 = this.getSelectorMapping(var1, var11 + "#" + var18, false);
  853.                   if (var12 != null) {
  854.                      this.getStyles(var12, var2, var3, var4, var5, var10 + 1, var7, var8);
  855.                   }
  856.  
  857.                   var12 = this.getSelectorMapping(var1, "#" + var18, false);
  858.                   if (var12 != null) {
  859.                      this.getStyles(var12, var2, var3, var4, var5, var10 + 1, var7, var8);
  860.                   }
  861.                }
  862.             }
  863.          }
  864.  
  865.       }
  866.    }
  867.  
  868.    public AttributeSet getViewAttributes(View var1) {
  869.       return new ViewAttributeSet(this, var1);
  870.    }
  871.  
  872.    void importStyleSheet(URL var1) {
  873.       try {
  874.          InputStream var2 = var1.openStream();
  875.          BufferedReader var3 = new BufferedReader(new InputStreamReader(var2));
  876.          CssParser var4 = new CssParser(this);
  877.          var4.parse(var1, var3, false, true);
  878.          ((Reader)var3).close();
  879.          var2.close();
  880.       } catch (Throwable var5) {
  881.       }
  882.  
  883.    }
  884.  
  885.    private synchronized void linkStyleSheetAt(StyleSheet var1, int var2) {
  886.       if (this.resolvedStyles.size() > 0) {
  887.          Enumeration var3 = this.resolvedStyles.elements();
  888.  
  889.          while(var3.hasMoreElements()) {
  890.             ResolvedStyle var4 = (ResolvedStyle)var3.nextElement();
  891.             var4.insertExtendedStyleAt(var1.getRule(var4.getName()), var2);
  892.          }
  893.       }
  894.  
  895.    }
  896.  
  897.    public void loadRules(Reader var1, URL var2) throws IOException {
  898.       CssParser var3 = new CssParser(this);
  899.       var3.parse(var2, var1, false, false);
  900.    }
  901.  
  902.    private synchronized void refreshResolvedRules(String var1, String[] var2, Style var3, int var4) {
  903.       if (this.resolvedStyles.size() > 0) {
  904.          Enumeration var5 = this.resolvedStyles.elements();
  905.  
  906.          while(var5.hasMoreElements()) {
  907.             ResolvedStyle var6 = (ResolvedStyle)var5.nextElement();
  908.             if (var6.matches(var1)) {
  909.                var6.insertStyle(var3, var4);
  910.             }
  911.          }
  912.       }
  913.  
  914.    }
  915.  
  916.    public AttributeSet removeAttribute(AttributeSet var1, Object var2) {
  917.       if (var2 instanceof StyleConstants) {
  918.          CSS.Attribute var3 = this.css.styleConstantsKeyToCSSKey((StyleConstants)var2);
  919.          if (var3 != null) {
  920.             return super.removeAttribute(var1, var3);
  921.          }
  922.       }
  923.  
  924.       return super.removeAttribute(var1, var2);
  925.    }
  926.  
  927.    public AttributeSet removeAttributes(AttributeSet var1, Enumeration var2) {
  928.       return super.removeAttributes(var1, var2);
  929.    }
  930.  
  931.    public AttributeSet removeAttributes(AttributeSet var1, AttributeSet var2) {
  932.       return super.removeAttributes(var1, this.convertAttributeSet(var2));
  933.    }
  934.  
  935.    private void removeMappingStyle(Object var1) {
  936.       ((Hashtable)var1).remove(RULE);
  937.    }
  938.  
  939.    public void removeStyle(String var1) {
  940.       Style var2 = ((StyleContext)this).getStyle(var1);
  941.       if (var2 != null) {
  942.          String var3 = this.cleanSelectorString(var1);
  943.          String[] var4 = this.getSimpleSelectors(var3);
  944.          synchronized(this){}
  945.  
  946.          try {
  947.             Object var7 = this.getRootSelectorMapping();
  948.  
  949.             for(int var8 = var4.length - 1; var8 >= 0; --var8) {
  950.                var7 = this.getSelectorMapping(var7, var4[var8], true);
  951.             }
  952.  
  953.             Style var9 = this.getMappingStyle(var7);
  954.             if (var9 != null) {
  955.                this.removeMappingStyle(var7);
  956.                if (this.resolvedStyles.size() > 0) {
  957.                   Enumeration var10 = this.resolvedStyles.elements();
  958.  
  959.                   while(var10.hasMoreElements()) {
  960.                      ResolvedStyle var11 = (ResolvedStyle)var10.nextElement();
  961.                      var11.removeStyle(var9);
  962.                   }
  963.                }
  964.             }
  965.          } catch (Throwable var13) {
  966.             throw var13;
  967.          }
  968.       }
  969.  
  970.       super.removeStyle(var1);
  971.    }
  972.  
  973.    synchronized void removeStyleSheet(StyleSheet var1) {
  974.       if (this.linkedStyleSheets != null) {
  975.          int var2 = this.linkedStyleSheets.indexOf(var1);
  976.          if (var2 != -1) {
  977.             this.linkedStyleSheets.removeElementAt(var2);
  978.             this.unlinkStyleSheet(var1, var2);
  979.             if (var2 == 0 && this.linkedStyleSheets.size() == 0) {
  980.                this.linkedStyleSheets = null;
  981.             }
  982.          }
  983.       }
  984.  
  985.    }
  986.  
  987.    void setBase(URL var1) {
  988.       this.base = var1;
  989.    }
  990.  
  991.    public void setBaseFontSize(int var1) {
  992.       this.css.setBaseFontSize(var1);
  993.    }
  994.  
  995.    public void setBaseFontSize(String var1) {
  996.       this.css.setBaseFontSize(var1);
  997.    }
  998.  
  999.    public Color stringToColor(String var1) {
  1000.       return CSS.stringToColor(var1);
  1001.    }
  1002.  
  1003.    public AttributeSet translateHTMLToCSS(AttributeSet var1) {
  1004.       AttributeSet var2 = this.css.translateHTMLToCSS(var1);
  1005.       Style var3 = ((StyleContext)this).addStyle((String)null, (Style)null);
  1006.       var3.addAttributes(var2);
  1007.       return var3;
  1008.    }
  1009.  
  1010.    private synchronized void unlinkStyleSheet(StyleSheet var1, int var2) {
  1011.       if (this.resolvedStyles.size() > 0) {
  1012.          Enumeration var3 = this.resolvedStyles.elements();
  1013.  
  1014.          while(var3.hasMoreElements()) {
  1015.             ResolvedStyle var4 = (ResolvedStyle)var3.nextElement();
  1016.             var4.removeExtendedStyleAt(var2);
  1017.          }
  1018.       }
  1019.  
  1020.    }
  1021. }
  1022.